package com.coisshi.base.common.utils;

import com.coisshi.base.common.exception.BizException;

/**
 * 业务断言工具类
 * 用于在 Service 层统一抛出业务异常（BizException）
 * 支持常见的断言：非空、布尔判断、字符串检查、集合检查等
 *
 * @author coisshi
 * @date 2025/04/22
 */
public class AssertUtil {

    /**
     * 断言对象非空
     *
     * @param object 被判断对象
     * @param msg    异常信息
     */
    public static void notNull(Object object, String msg) throws BizException {
        if (object == null) {
            throw new BizException(msg);
        }
    }

    /**
     * 断言对象为空
     *
     * @param object 被判断对象
     * @param msg    异常信息
     */
    public static void isNull(Object object, String msg) throws BizException {
        if (object != null) {
            throw new BizException(msg);
        }
    }

    /**
     * 断言条件为 true
     *
     * @param condition 条件表达式
     * @param msg       异常信息
     */
    public static void isTrue(boolean condition, String msg) throws BizException {
        if (!condition) {
            throw new BizException(msg);
        }
    }

    /**
     * 断言条件为 false
     *
     * @param condition 条件表达式
     * @param msg       异常信息
     */
    public static void isFalse(boolean condition, String msg) throws BizException {
        if (condition) {
            throw new BizException(msg);
        }
    }

    /**
     * 断言字符串非空（非 null 且去除空格后长度大于0）
     *
     * @param str 字符串
     * @param msg 异常信息
     */
    public static void notBlank(String str, String msg) throws BizException {
        if (str == null || str.trim().isEmpty()) {
            throw new BizException(msg);
        }
    }

    /**
     * 断言数组不为空
     *
     * @param array 数组
     * @param msg   异常信息
     */
    public static void notEmpty(Object[] array, String msg) throws BizException {
        if (array == null || array.length == 0) {
            throw new BizException(msg);
        }
    }

    /**
     * 断言集合不为空
     *
     * @param collection 集合
     * @param msg        异常信息
     */
    public static void notEmpty(java.util.Collection<?> collection, String msg) throws BizException {
        if (collection == null || collection.isEmpty()) {
            throw new BizException(msg);
        }
    }

    /**
     * 断言 Map 不为空
     *
     * @param map Map 对象
     * @param msg 异常信息
     */
    public static void notEmpty(java.util.Map<?, ?> map, String msg) throws BizException {
        if (map == null || map.isEmpty()) {
            throw new BizException(msg);
        }
    }

    /**
     * 通用的断言失败方法
     *
     * @param msg 异常信息
     */
    public static void fail(String msg) throws BizException {
        throw new BizException(msg);
    }
}
